dependencies: Vec<Dependency>,
features: BTreeMap<String, Vec<String>>,
checksum: Option<String>,
+ links: Option<String>,
}
impl Summary {
pub fn new(pkg_id: PackageId,
dependencies: Vec<Dependency>,
- features: BTreeMap<String, Vec<String>>) -> CargoResult<Summary> {
+ features: BTreeMap<String, Vec<String>>,
+ links: Option<String>) -> CargoResult<Summary> {
for dep in dependencies.iter() {
if features.get(dep.name()).is_some() {
bail!("Features and dependencies cannot have the \
Ok(Summary {
inner: Rc::new(Inner {
package_id: pkg_id,
- dependencies: dependencies,
- features: features,
+ dependencies,
+ features,
checksum: None,
+ links,
}),
})
}
pub fn checksum(&self) -> Option<&str> {
self.inner.checksum.as_ref().map(|s| &s[..])
}
+ pub fn links(&self) -> Option<&str> {
+ self.inner.links.as_ref().map(|s| &s[..])
+ }
pub fn override_id(mut self, id: PackageId) -> Summary {
Rc::make_mut(&mut self.inner).package_id = id;
}
pub fn map_dependencies<F>(mut self, f: F) -> Summary
- where F: FnMut(Dependency) -> Dependency {
+ where F: FnMut(Dependency) -> Dependency {
{
let slot = &mut Rc::make_mut(&mut self.inner).dependencies;
let deps = mem::replace(slot, Vec::new());
fn parse_registry_package(&mut self, line: &str)
-> CargoResult<(Summary, bool)> {
let RegistryPackage {
- name, vers, cksum, deps, features, yanked
+ name, vers, cksum, deps, features, yanked, links
} = super::DEFAULT_ID.set(&self.source_id, || {
serde_json::from_str::<RegistryPackage>(line)
})?;
let pkgid = PackageId::new(&name, &vers, &self.source_id)?;
- let summary = Summary::new(pkgid, deps.inner, features)?;
+ let summary = Summary::new(pkgid, deps.inner, features, links)?;
let summary = summary.set_checksum(cksum.clone());
if self.hashes.contains_key(&name[..]) {
self.hashes.get_mut(&name[..]).unwrap().insert(vers, cksum);
features: BTreeMap<String, Vec<String>>,
cksum: String,
yanked: Option<bool>,
+ #[serde(default)]
+ links: Option<String>,
}
struct DependencyList {
let include = project.include.clone().unwrap_or_default();
let summary = Summary::new(pkgid, deps, me.features.clone()
- .unwrap_or_else(BTreeMap::new))?;
+ .unwrap_or_else(BTreeMap::new), project.links.clone())?;
let metadata = ManifestMetadata {
description: project.description.clone(),
homepage: project.homepage.clone(),
fn requires_precise(&self) -> bool { false }
}
let mut registry = MyRegistry(registry);
- let summary = Summary::new(pkg.clone(), deps, BTreeMap::new()).unwrap();
+ let summary = Summary::new(pkg.clone(), deps, BTreeMap::new(), None).unwrap();
let method = Method::Everything;
let resolve = resolver::resolve(&[(summary, method)], &[], &mut registry, None, false)?;
let res = resolve.iter().cloned().collect();
($pkgid:expr => [$($deps:expr),+]) => ({
let d: Vec<Dependency> = vec![$($deps.to_dep()),+];
- Summary::new($pkgid.to_pkgid(), d, BTreeMap::new()).unwrap()
+ Summary::new($pkgid.to_pkgid(), d, BTreeMap::new(), None).unwrap()
});
($pkgid:expr) => (
- Summary::new($pkgid.to_pkgid(), Vec::new(), BTreeMap::new()).unwrap()
+ Summary::new($pkgid.to_pkgid(), Vec::new(), BTreeMap::new(), None).unwrap()
)
}
}
fn pkg(name: &str) -> Summary {
- Summary::new(pkg_id(name), Vec::new(), BTreeMap::new()).unwrap()
+ Summary::new(pkg_id(name), Vec::new(), BTreeMap::new(), None).unwrap()
}
fn pkg_id(name: &str) -> PackageId {
}
fn pkg_loc(name: &str, loc: &str) -> Summary {
- Summary::new(pkg_id_loc(name, loc), Vec::new(), BTreeMap::new()).unwrap()
+ Summary::new(pkg_id_loc(name, loc), Vec::new(), BTreeMap::new(), None).unwrap()
}
fn dep(name: &str) -> Dependency { dep_req(name, "1.0.0") }